﻿using BusinessLogicLayer;
using DevComponents.DotNetBar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PresentationLayer
{
    public delegate void CapNhatNghiPhep(LoaiHanhDong hd, NghiPhep np);
    public partial class frmNghiPhep : Form
    {
        public LoaiHanhDong loaiHanhDong { get; set; }
        public NghiPhep NghiPhepCapNhat { get; set; }
        public CapNhatNghiPhep capNhapDS { get; set; }
        private List<NhanVien> ListNhanVien;
        private NghiPhepManager manager = new NghiPhepManager();

        public frmNghiPhep(LoaiHanhDong loai, CapNhatNghiPhep capnhatds)
        {
            InitializeComponent();
            this.loaiHanhDong = loai;
            this.capNhapDS = capnhatds;
        }

        NghiPhep LayThongTinForm()
        {
            NghiPhep np = new NghiPhep();
            np.NgayDiLam = dtiNgayDiLam.Value;
            np.NgayNghi = dtiNgayNghi.Value;
            np.LyDo = txtLyDo.Text.Trim();
            if (loaiHanhDong == LoaiHanhDong.CapNhat)
            {
                np.MaNghiPhep = NghiPhepCapNhat.MaNghiPhep;
                np.MaNhanVien = NghiPhepCapNhat.MaNhanVien;
            }
            else
            {
                np.MaNhanVien = cbMaNhanVien.SelectedValue.ToString();
            }
            return np;
        }

        private bool CheckValidated()
        {
            if (dtiNgayDiLam.Value <= dtiNgayNghi.Value)
            {
                dtiNgayDiLam.Focus();
                MessageBox.Show("Nhập sai thông tin ngày đi làm!!!","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                return false;
            }
            if (txtLyDo.Text == "")
            {
                txtLyDo.Focus();
                MessageBox.Show("Nhập thiếu thông tin lý do!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            return true;
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (CheckValidated())
            {
                NghiPhep np = LayThongTinForm();
                if (loaiHanhDong == LoaiHanhDong.Them)
                {
                    ActionResult rs = new NghiPhepManager().ThemNghiPhep(np);
                    if (rs.Success)
                    {
                        if (capNhapDS != null)
                            capNhapDS(LoaiHanhDong.Them, np);
                        MessageBox.Show("Thêm thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        LoadForm();
                    }
                }
                else
                {
                    ActionResult rs = new NghiPhepManager().CapNhatNghiPhep(ref np);
                    if (rs.Success)
                    {
                        if (capNhapDS != null)
                            capNhapDS(LoaiHanhDong.CapNhat, np);
                        MessageBox.Show("Cập nhật thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        LoadForm();
                        Close();
                    }
                }
            }
        }

        private void frmNghiPhep_Load(object sender, EventArgs e)
        {
            LoadForm();
        }

        void LoadForm()
        {
            if (loaiHanhDong == LoaiHanhDong.Them)
            {
                ListNhanVien = manager.LayDanhsachNhanVien().ObjectList;
                if (ListNhanVien.Count == 0)
                {
                    MessageBox.Show("Không có nhân viên nào hợp lệ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    Close();
                }
                dtiNgayNghi.Value = DateTime.Today;
                dtiNgayDiLam.Value = dtiNgayNghi.Value.AddDays(1);
                cbMaNhanVien.DataSource = cbTenNhanVien.DataSource = ListNhanVien;
                cbMaNhanVien.ValueMember = cbTenNhanVien.ValueMember = "MaNhanVien";
                cbTenNhanVien.DisplayMember = "HoTen";
                cbMaNhanVien.DisplayMember = "MaNhanVien";

                cbMaNhanVien.DataSource = cbTenNhanVien.DataSource = ListNhanVien;
                foreach (var item in ListNhanVien)
                {
                    cbMaNhanVien.AutoCompleteCustomSource.Add(item.MaNhanVien);
                    cbTenNhanVien.AutoCompleteCustomSource.Add(item.HoTen);
                }

                cbMaNhanVien.AutoCompleteMode = cbTenNhanVien.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                cbMaNhanVien.AutoCompleteSource = cbTenNhanVien.AutoCompleteSource = AutoCompleteSource.CustomSource;

                txtLyDo.Text = "";
                this.Text = "Thêm nghỉ phép";
                btnOk.Text = "Thêm";
            }
            else
            {
                cbMaNhanVien.Enabled = cbTenNhanVien.Enabled = false;
                cbTenNhanVien.Items.Add(NghiPhepCapNhat.HoTen);
                cbTenNhanVien.SelectedIndex = 0;
                cbMaNhanVien.Items.Add(NghiPhepCapNhat.MaNhanVien);
                cbMaNhanVien.SelectedIndex = 0;
                txtLyDo.Text = NghiPhepCapNhat.LyDo;
                dtiNgayDiLam.Value = NghiPhepCapNhat.NgayDiLam;
                dtiNgayNghi.Value = NghiPhepCapNhat.NgayNghi;
                this.btnOk.Text = "Cập nhật";
                this.Text = "Cập nhật nghỉ phép: " + NghiPhepCapNhat.MaNghiPhep + ".";
            }
            
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            LoadForm();
        }

        private void dtiNgayNghi_ValueChanged(object sender, EventArgs e)
        {
            if (loaiHanhDong != LoaiHanhDong.CapNhat)
                dtiNgayDiLam.Value = dtiNgayNghi.Value.AddDays(1);
        }

        private void cbMaNhanVien_Validated(object sender, EventArgs e)
        {
            if (!cbMaNhanVien.AutoCompleteCustomSource.Contains(cbMaNhanVien.Text))
                cbMaNhanVien.SelectedIndex = 0;
        }

        private void cbTenNhanVien_Validated(object sender, EventArgs e)
        {
            if (!cbTenNhanVien.AutoCompleteCustomSource.Contains(cbTenNhanVien.Text))
                cbTenNhanVien.SelectedIndex = 0;
        }
    }
}
